import { adminVariantUpdateCommandSchema, positiveIdentifierSchema } from "@salixcommerce/core"; import type { NextRequest } from "next/server"; import { adminRepository } from "@/server/admin/admin"; import { requireAdmin } from "@/server/admin/authorization"; import { adminFailureResponse, adminJson, adminResultResponse } from "@/server/admin/http"; import { hashCommerceRequest } from "@/server/commerce/capability"; import { validateJsonMutationRequest } from "@/server/commerce/http"; export async function PATCH( request: NextRequest, context: RouteContext<"/api/admin/variants/[id]">, ) { const gate = validateJsonMutationRequest(request); if (!gate.ok) return gate.response; const variantId = positiveIdentifierSchema.safeParse((await context.params).id); const command = adminVariantUpdateCommandSchema.safeParse(await request.json().catch(() => null)); if (!variantId.success || !command.success) return adminJson( { error: { code: "INVALID_REQUEST", message: "Invalid variant update." }, ok: false }, 400, ); const admin = await requireAdmin("admin.catalog.write"); if (!admin.ok) return adminFailureResponse(admin.error); return adminResultResponse( await adminRepository.updateVariant( admin.data, variantId.data, command.data, hashCommerceRequest({ command: command.data, variantId: variantId.data }), ), ); }